CognitoユーザープールからAWS CLIでユーザーを検索してみる

CognitoユーザープールからAWS CLIでユーザーを検索してみる

Clock Icon2020.09.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

今回は、CognitoユーザープールからAWS CLIでユーザーを検索してみました。

やってみる

属性値による検索

ユーザーを属性値により検索する場合はcognito-idp list-usersコマンドでfilterオプションを使用します。

まず、オプションなしで実行した場合はすべてのユーザーが取得されます。

%  aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr

{
    "Users": [
        {
            "Username": "user01",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
                },
                {
                    "Name": "email_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8100000000"
                },
                {
                    "Name": "email",
                    "Value": "user01@example.com"
                }
            ],
            "UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
            "UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        },
        {
            "Username": "user02",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
                },
                {
                    "Name": "email_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8111111111"
                },
                {
                    "Name": "email",
                    "Value": "user02@example.com"
                },
                {
                    "Name": "custom:attr01",
                    "Value": "りんご"
                }
            ],
            "UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
            "UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        },
    ]
}

filterオプションには"AttributeName Filter-Type "AttributeValue ""のように検索クエリを指定します。AttributeNameにはカスタム属性は指定できません。Filter-Typeには完全一致の=と前方一致の^=が使用可能です。

sub属性を完全一致で検索してみます。

% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr \
--filter 'sub = "bca4e2a5-a3c1-4201-904b-4c29e484e326"'

{
    "Users": [
        {
            "Username": "user01",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
                },
                {
                    "Name": "email_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8100000000"
                },
                {
                    "Name": "email",
                    "Value": "user01@example.com"
                }
            ],
            "UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
            "UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        }
    ]
}

email属性を前方一致で検索してみます。

% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr \
--filter 'email ^= "user02"'

{
    "Users": [
        {
            "Username": "user02",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
                },
                {
                    "Name": "email_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8111111111"
                },
                {
                    "Name": "email",
                    "Value": "user02@example.com"
                },
                {
                    "Name": "custom:attr01",
                    "Value": "りんご"
                }
            ],
            "UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
            "UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        }
    ]
}

filterオプションに空文字列''を指定した場合は、すべてのユーザーを取得できました。

% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr --filter ''

{
    "Users": [
        {
            "Username": "user01",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
                },
                {
                    "Name": "email_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8100000000"
                },
                {
                    "Name": "email",
                    "Value": "user01@example.com"
                }
            ],
            "UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
            "UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        },
        {
            "Username": "user02",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
                },
                {
                    "Name": "email_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "True"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8111111111"
                },
                {
                    "Name": "email",
                    "Value": "user02@example.com"
                },
                {
                    "Name": "custom:attr01",
                    "Value": "りんご"
                }
            ],
            "UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
            "UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        },
    ]
}

所属グループによる検索

ユーザーを所属グループにより検索する場合はcognito-idp list-users-in-groupコマンドを使用します。

まず準備としてグループgroup101を作成してユーザーuser01を追加します。

% aws cognito-idp create-group --group-name group101 --user-pool-id ap-northeast-1_AwJpGCDnr

{
    "Group": {
        "GroupName": "group101",
        "UserPoolId": "ap-northeast-1_AwJpGCDnr",
        "LastModifiedDate": "2020-08-31T23:51:46.111000+09:00",
        "CreationDate": "2020-08-31T23:51:46.111000+09:00"
    }
}

% aws cognito-idp admin-add-user-to-group --user-pool-id ap-northeast-1_AwJpGCDnr \
--username user01 \
--group-name group101

group101に所属するユーザーを取得してみます。

% aws cognito-idp list-users-in-group --user-pool-id ap-northeast-1_AwJpGCDnr \
--group-name group101

{
    "Users": [
        {
            "Username": "user01",
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
                },
                {
                    "Name": "email_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number_verified",
                    "Value": "true"
                },
                {
                    "Name": "phone_number",
                    "Value": "+8100000000"
                },
                {
                    "Name": "email",
                    "Value": "user01@example.com"
                }
            ],
            "UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
            "UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        }
    ]
}

おわりに

CognitoユーザープールからAWS CLIでユーザーを検索してみました。

検索にはカスタム属性が使えないなど制限があるので属性設計の際には注意が必要ですね。

参考

移譲

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.